package teaching.io.advance;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 * 压缩输入流示例。
 * 
 * @author deng.zhao
 *
 */
public class ZipInputStreamExample {

	public static void main(String[] args) {
		// 创建文件对象，存放待解压文件信息；
		File file = new File("d:/test.zip");

		// 创建压缩输入流，进行解压操作；
		try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));) {
			// 定义压缩项，用于获取压缩文件中的文件信息；
			ZipEntry zipEntry = null;
			// 循环获取压缩文件中的压缩项；
			while ((zipEntry = zipInputStream.getNextEntry()) != null) {
				// 判断是否为路径；
				if (zipEntry.isDirectory()) { // 若是；

				} else { // 若否；
					// 创建文件输出流，将从压缩输入六种读取的数据输出到文件；
					try (OutputStream fileOutputStream = new FileOutputStream(file.getParent() + zipEntry.getName());) {
						int temp;
						while ((temp = zipInputStream.read()) != -1) {
							fileOutputStream.write(temp);
						}
					}
				}

				// 关闭输入项；
				zipInputStream.closeEntry();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		System.out.println("OK!");
	}
}
